// 该模块 用于保存个人信息
import { getUserInfo, login, register, getUserPermission } from '@/api/login'
import { getToken, removeToken, setToken } from '@/utils/auth'
/** 动态路由 */
import { asyncRoutes } from '@/router'

export default {
    namespaced: true,
    state: {
        token: getToken(), // 从cookie中获取
        userInfo: {},
        userPermission: {},  // 当前用户权限
        Routes: [] // 当前用户可用动态路由
    },
    mutations: {
        // 设置token
        set_token(state, token) {
            state.token = token
            setToken(token)
        },
        // 移除token
        remove_token(state) {
            state.token = ''
            removeToken()
        },
        // 保存用户数据
        set_userInfo(state, info) {
            state.userInfo = info
        },
        // 移除用户信息
        remove_userInfo(state) {
            state.userInfo = {}
        },
        // 保存用户权限信息
        set_userPermission(state, permission) {
            state.userPermission = permission
        },
        // 保存动态路由
        set_Routes(state, routes) {
            state.Routes = routes
        },
        // 移除用户权限信息
        remove_userPermission(state) {
            state.userPermission = {}
        }

    },
    actions: {
        // 调用注册接口，获取并保存token
        async register(context, data) {
            const res = await register(data)
            // 保存注册的时间戳
            localStorage.setItem('registerTime', Date.now())
        },

        // 调用登录接口，获取并保存token
        async login(context, data) {
            const res = await login(data)
            context.commit('set_token', res.data.jwt)
            // 保存登录的时间戳
            localStorage.setItem('loginTime', Date.now())
        },
        // 调用接口，获取用户信息
        async getUserInfo(context) {
            const res = await getUserInfo()
            context.commit('set_userInfo', res.data)
        },
        // 调用接口，获取用户权限，获取动态路由
        async getUserPermission(context) {
            const res = await getUserPermission()
            let page = res.data.menus
            let btn = res.data.points
            context.commit('set_userPermission', { page, btn })

            /** 所有路由 */
            // let routes = asyncRoutes

            /** 权限路由 */
            let routes = asyncRoutes.filter(item => {
                return page.includes(item.code)
            })

            context.commit('set_Routes', routes)
            return routes
        },
        // 退出登录 -- 移除token和用户信息
        logout(context) {
            console.log('清除token,userInfo');
            context.commit('remove_token')
            context.commit('remove_userInfo')
            context.commit('remove_userPermission')
        }
    }
}